package com.pig4cloud.pigx.pay.handler;

import com.bblocks.config.SpringContextUtils;
import com.pig4cloud.pigx.pay.entity.DTO.PayParamsDTO;
import com.pig4cloud.pigx.pay.entity.PayChannel;
import com.pig4cloud.pigx.pay.entity.PayTradeOrder;
import com.pig4cloud.pigx.pay.service.PayTradeOrderService;

import java.io.IOException;

/**
 * @author lengleng
 * @date 2019-05-31
 * <p>
 * 支付业务
 */
public interface PayOrderHandler {

	/**
	 * 准备支付参数
	 * @param tenantId 租户ID（可以空）
	 */
	default PayChannel preparePayParams(Long tenantId) {
		return null;
	}


	/**
	 * 创建订单（存在则返回已有数据）
	 * @param payInfo
	 * @return
	 */
	PayTradeOrder createTradeOrder(PayParamsDTO payInfo);

	/**
	 * 调起渠道(收款)支付(二维码支付，用户扫码)
	 * @param tradeOrder 交易订单
	 * @return obj
	 */
	Object collection( PayTradeOrder tradeOrder);

	/**
	 * 发起支付（wap支付无返回，页面重定向），纯接口
	 * @param tradeOrder
	 * @return
	 */
	Object pay(PayTradeOrder tradeOrder) throws IOException;


	/**
	 * 更新订单信息
	 * @param goodsOrder 商品订单
	 * @param tradeOrder 交易订单
	 */


	/**
	 * 调用入口
	 * @param goodsOrde 商品订单
	 * @return
	 */
	Object handle(PayParamsDTO goodsOrde);

	/**
	 * 支付（用户端发起）
	 * @param payInfo
	 * @return
	 */
	PayTradeOrder handlePay(PayParamsDTO payInfo) throws IOException ;

	default public PayTradeOrder createTradeOrderIfNull(PayParamsDTO payInfo){
		PayTradeOrder tradeOrder = SpringContextUtils.getBean(PayTradeOrderService.class).getByTendIdAndReqNo(payInfo.getTenantId(), payInfo.getReqNo());
		if(tradeOrder == null) {
			tradeOrder = this.createTradeOrder(payInfo);
		}else{//设置新的属性(未实现，如支付宝支付改成微信支付的)

		}
		return tradeOrder;
	}
}
